﻿/*!
 * \file converter.hpp
 * \date 2023/05/18 15:49
 *
 * \author Yunfeng.Bo
 * Contact: Yunfeng.Bo@qq.com
 *
 * \brief 转换工具，包括：
 *          - 字符串编码转换 string_to_utf8
 *
 * \note
 */

#pragma once

#include <string>

#include <boost/beast/core/detail/base64.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/device/back_inserter.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filtering_streambuf.hpp>

namespace util {
// std::string 转换为 UTF-8 编码
std::string string_to_utf8(const std::string& str);

// string -> gzip 压缩，默认最大压缩率
bool gzip_comp(const std::string& input, std::string& output,
               int params = boost::iostreams::gzip::best_compression);
// string -> gzip 解压缩
bool gzip_decomp(const std::string& input, std::string& output);

// string -> base64 编码
bool Base64Encode(const std::string& input, std::string& output);
// base64 -> string 解码
bool Base64Decode(const std::string& input, std::string& output);

std::string  UnicodeToUTF8(const std::wstring& wstr);
std::wstring UTF8ToUnicode(const std::string& str);

std::string u8str_to_str(const std::u8string& u8str);

std::string utf8_to_gb2312(const std::string& utf8);
std::string gb2312_to_utf8(const std::string& gb2312);

// 将一个 文件/文件夹 转换为本地字符串：windows 下转为 gb2312
std::string to_local_path(const std::string& path);
}   // namespace util